package leetcode;
/**
 * 62.不同路径
 * 一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为 “Start” ）。
 * 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为 “Finish” ）。
 * 问总共有多少条不同的路径？
 *
 * 输入：m = 3, n = 2
 * 输出：3
 * 解释：
 * 从左上角开始，总共有 3 条路径可以到达右下角。
 * 1. 向右 -> 向下 -> 向下
 * 2. 向下 -> 向下 -> 向右
 * 3. 向下 -> 向右 -> 向下
 *
 * 输入：m = 3, n = 3
 * 输出：6
 *
 * 输入：m = 3, n = 7
 * 输出：28
 */
public class Num_62 {
    public static void main(String[] args) {
        System.out.println(uniquePaths(3,2)); // 3
        System.out.println(uniquePaths(3,3)); // 6
        System.out.println(uniquePaths(3,7)); // 28
    }
    public static int uniquePaths(int m, int n) {
        //dp[i][j]表示到达第i行j列的路径个数
        int[][] dp = new int[m+1][n+1];
        //初始化
        for(int j=1; j<=n; j++){
            dp[1][j] = 1;
        }
        for(int i=1; i<=m; i++){
            dp[i][1] = 1;
        }
        //赋值
        for(int i=2; i<=m; i++){
            for(int j=2; j<=n; j++){
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m][n];
    }
}
